home *** CD-ROM | disk | FTP | other *** search
/ Tiger Disk 13 / Tiger_Disk_013_19xx_Tiger-Crew-Disk_de_Side_B.d64 / lektion 10 (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  10KB  |  257 lines

  1. 1 rem*********************************
  2. 2 rem*---------lektion-10------------*
  3. 3 rem*-------------------------------*
  4. 4 rem*----(w)-by-arno-freisinger-----*
  5. 5 rem*-------------------------------*
  6. 6 rem*--------teachmaster------------*
  7. 7 rem*-------------------------------*
  8. 8 rem*********************************
  9. 10 poke 53280 , 11 : poke 53281 , 11: print "[155]" : poke 2050 , 1
  10. 15 sys 42291 : poke 46 , peek (35) : poke 45 , peek (781) + 2 : clr
  11. 20 print"[147]"tab(15)"teachmaster"
  12. 30 print""tab(09)"(w) by arno freisinger"
  13. 40 print""tab(10)"                    "
  14. 50 for i = 1 to 2000 : next
  15. 60 print"[147]"tab(15)"lektion 10"
  16. 70 for i = 1 to 1000 : next
  17. 80 get a$ : get a$ : get a$
  18. 85 rem*********************************
  19. 90 rem*-------- seite 1 --------------*
  20. 95 rem*********************************
  21. 100 print"[147]so,jetzt kommt der schwieriegste teil"
  22. 110 print"unseres kurses. wir werden uns mit den"
  23. 120 print"interrupts des mikroprozessors be-"
  24. 130 print"schaeftigen. da unser computer nichts[146]"
  25. 140 print"gleichzeitig machen kann,muss er immer"
  26. 150 print"das aktuelle programm unterbrechen, um"
  27. 160 print"dinge zu machen, wie zum beispiel den"
  28. 170 print"cursor zu steuern, ihn blinken zu lassen"
  29. 180 print"und die interne uhr weiter zu stellen."
  30. 190 print"unser computer tut dies 60-mal in der"
  31. 210 print""tab(14)"taste druecken"
  32. 220 print""tab(18)"-1-"
  33. 230 gosub 250
  34. 240 on a goto 300 , 60
  35. 247 rem********************************
  36. 248 rem*-------- tasten abfrage ------*
  37. 249 rem********************************
  38. 250 get a$ : if a$ = "" then 250
  39. 260 if a$ = "z" then a = 2 : goto 280
  40. 270 a = 1
  41. 280 return
  42. 285 rem********************************
  43. 295 rem*------------ seite 2 ---------*
  44. 297 rem********************************
  45. 300 print"[147]sekunde. d.h. unser computer unterbricht"
  46. 310 print"jedes programm 60-mal in einer sekunde,"
  47. 320 print"ohne dass wir es merken. eine methode"
  48. 330 print"unsere programme schneller zu machen "
  49. 340 print"waere die, die anzahl der unter-"
  50. 350 print"brechungen zu vermindern. dazu spaeter,"
  51. 360 print"wenn wir mehr ueber den interrupt "
  52. 370 print"wissen. es gibt mehrere arten von "
  53. 380 print"interrupts. wir wollen in diesem kurs"
  54. 390 print"erst einmal ueber den timerinterupt "
  55. 410 print""tab(14)"taste druecken"
  56. 420 print""tab(18)"-2-"
  57. 430 gosub 250
  58. 440 on a goto 450 , 100
  59. 450 rem********************************
  60. 460 rem*-------- seite 3 -------------*
  61. 470 rem********************************
  62. 480 print"[147]reden. dieser tritt, wie schon gesagt,"
  63. 490 print"60-mal in einer sekunde auf. er kommt"
  64. 500 print"von dem cia 1-baustein, der in unserem"
  65. 510 print"computer die komunikation mit der"
  66. 520 print"aussenwelt (floppy,drucker,u.s.w.)"
  67. 530 print"regelt. der timer ist in den speicher-"
  68. 540 print"stellen $dc04 (low-byte) und $dc05 "
  69. 550 print"(hi-byte). jetzt ein programm,"
  70. 560 print"das alle (auch basic) programme be-"
  71. 570 print"schleunigt :"
  72. 580 print""tab(14)"taste druecken"
  73. 590 print""tab(18)"-3-"
  74. 600 gosub 250
  75. 610 on a goto 620 , 300
  76. 620 rem********************************
  77. 630 rem*---------- seite 4 -----------*
  78. 640 rem********************************
  79. 650 print"[147]lda  #$ff ;$ff (255) in dem akku laden."
  80. 660 print"sta $dc05 ;in das hi-byte des timers"
  81. 670 print"          ;schreiben.                 "
  82. 680 print"rts       ;zurueck springen.          "
  83. 690 print"wenn sie dieses programm ausgefuehrt"
  84. 700 print"haben, dann ist der interrupt merklich"
  85. 710 print"eingeschraenkt. sie koennen dies an dem"
  86. 720 print"curosr sehen, er blinkt jetzt sehr "
  87. 730 print"langsam. aber achtung, die uhr geht"
  88. 740 print"jetzt sehr stark nach. da wir gerade"
  89. 750 print"bei beschleunigungsmethoden sind,moechte"
  90. 770 print""tab(18)"-4-"
  91. 780 gosub 250
  92. 790 on a goto 800 , 450
  93. 800 rem********************************
  94. 810 rem*-------- seite 5 -------------*
  95. 820 rem********************************
  96. 830 print"[147]ich ihnen eine andere methode zeigen,"
  97. 840 print"die zwar nicht jetzt hierher passt."
  98. 850 print"diese mothode ist ganz einfach."
  99. 860 print"sie brauchen nur den bildschirm abzu-"
  100. 870 print"schalten. dies koennen sie so :"
  101. 880 print"im video-chip des computers ist ein bit"
  102. 890 print"im register $11 (17) also speicherstelle"
  103. 900 print"53265. es ist das bit 4, wenn es auf "
  104. 910 print"null gesetzt wird, dann nimmt der bild-"
  105. 920 print"schirm die rahmenfarbe an und schaltet"
  106. 940 print""tab(14)"taste druecken"
  107. 950 print""tab(18)"-5-"
  108. 960 gosub 250
  109. 970 on a goto 980 , 620
  110. 980 rem********************************
  111. 990 rem*---------- seite 6 -----------*
  112. 995 rem********************************
  113. 1000 print"[147]sich ab. diese art der beschleunigung"
  114. 1010 print"bring ca.3% an geschwindigkeitszuwachs."
  115. 1020 print"dies hoehrt sich nicht viel an, aber es"
  116. 1030 print"taeuscht, denn bei langen programmen"
  117. 1040 print"kommt da schon einiges an zeitgewinn"
  118. 1050 print"hinzu. jetzt aber weiter mit den "
  119. 1060 print"interrupts. als wir ueber die flags ge-"
  120. 1070 print"sprochen haben,wird ihnen aufgefallen"
  121. 1080 print"sein, dass wir das i-flag ausgelassen"
  122. 1090 print"haben. solange dieses flag auf null"
  123. 1100 print""tab(14)"taste druechen"
  124. 1110 print""tab(18)"-6-"
  125. 1120 gosub 250
  126. 1130 on a goto 1150 , 800
  127. 1150 rem*******************************
  128. 1160 rem*------- seite 7 -------------*
  129. 1170 rem*******************************
  130. 1180 print"[147]steht,werden interrupts zugelassen."
  131. 1190 print"wenn es aber auf eins gesetzt wird,"
  132. 1200 print"dann werden die timer-interrupts "
  133. 1210 print"blockiert. der befehl dazu lautet sei[146]."
  134. 1220 print"er ist nur ein byte lang und das gegen-"
  135. 1230 print"teil zu diesem befehl lautet cli, es"
  136. 1240 print"loescht das i-flag. um nun einen inter-"
  137. 1250 print"rupt auf unser programm zu bekommen,"
  138. 1260 print"muessen wir einen zeiger aendern, der"
  139. 1270 print"in den speicherstellen $0314 und $0315"
  140. 1290 print""tab(14)"taste druecken"
  141. 1300 print""tab(18)"-7-"
  142. 1310 gosub 250
  143. 1320 on a goto 1330 , 1000
  144. 1330 rem*******************************
  145. 1340 rem*---------- seite 8 ----------*
  146. 1350 rem*******************************
  147. 1360 print"[147]liegt. wir haben in der letzten lektion"
  148. 1370 print"die indirekte adressierung kennengelernt"
  149. 1380 print"und diese adressierungsart liegt hier "
  150. 1390 print"auch vor. wir muessen in den speicher-"
  151. 1400 print"stellen $0314 und $0315 unsere adresse"
  152. 1410 print"ablegen im bekannten format low-byte"
  153. 1420 print"und hi-byte. angenommen unser programm"
  154. 1430 print"faengt bei adresse $c000 an, dann "
  155. 1440 print"wuerden die speicherstellen $0314 und"
  156. 1450 print"$0315 so aussehen :                  "
  157. 1480 print""tab(14)"taste druecken"
  158. 1490 print""tab(18)"-8-"
  159. 1500 gosub 250
  160. 1510 on a goto 1520 , 1150
  161. 1520 rem*******************************
  162. 1530 rem*---------- seite 9 ----------*
  163. 1540 rem*******************************
  164. 1550 print"[147]$0314 = $00                          "
  165. 1560 print"$0315 = $c0                        "
  166. 1570 print"am ende ihres programms muessen sie in"
  167. 1580 print"die normale inpterruptroutine springen,"
  168. 1590 print"wenn sie nicht einen computerabsturz"
  169. 1600 print"riskieren wollen. es gibt aber auch die"
  170. 1610 print"moeglichkeit,das programm mit einem"
  171. 1620 print"rti[146] befehl zu beenden. der rti-befehl"
  172. 1630 print"funktioniert wie der rts befehl,nur "
  173. 1640 print"halt fuer einen interrupt ruecksprung."
  174. 1650 print""tab(14)"taste druecken"
  175. 1660 print""tab(18)"-9-"
  176. 1670 gosub 250
  177. 1680 on a goto 1700 , 1340
  178. 1700 rem*******************************
  179. 1710 rem*---------- seite 10 ---------*
  180. 1720 rem*******************************
  181. 1730 print"[147]beim aendern des sprungvektors auf ihr"
  182. 1740 print"interrupt programm muessen sie vorher"
  183. 1750 print"den interrupt abschalten."
  184. 1760 print"so,jetzt ein kleines programm dazu :"
  185. 1770 print"sei        ;interrupt sperren.         "
  186. 1780 print"lda #<(int);low-byte laden.            "
  187. 1790 print"sta $0314  ;in den vektor schreiben."
  188. 1800 print"lda #>(int);hi-byte laden.            "
  189. 1810 print"sta $0315  ;in den vektor schreiben."
  190. 1820 print"cli        ;interrupts wieder zulassen."
  191. 1840 printtab(14)"taste druecken"
  192. 1850 print""tab(17)"-10-"
  193. 1860 gosub 250
  194. 1870 on a goto 1880 , 1520
  195. 1880 rem*******************************
  196. 1890 rem*---------- seite 11----------*
  197. 1900 rem*******************************
  198. 1910 print"[147]rts        ;zurueck springen(hier basic)"
  199. 1920 print"das war das programm zur vektoren"
  200. 1930 print"aenderung. jetzt das eigendliche"
  201. 1940 print"interruptprogramm :"
  202. 1950 print"   lda 197  ;tastenspeicher lesen."
  203. 1960 print"   cmp #$04 ;mit f1 vergleichen."
  204. 1970 print"   bne tt   ;falls = f1 dann zu tt."
  205. 1980 print"   jmp $ea31;weiter mit interrupt<>f1"
  206. 1990 print"tt inc $d020;rahmenfarbe + 1     "
  207. 2000 print"   jmp $ea31;weiter mit interrupt"
  208. 2100 print""tab(14)"taste druecken"
  209. 2110 print""tab(17)"-11-"
  210. 2120 gosub 250
  211. 2130 x = 0 : on a goto 2150 , 1700
  212. 2150 rem*******************************
  213. 2160 rem*---------- daten lesen ------*
  214. 2170 rem*******************************
  215. 2180 read a
  216. 2190 :if a = -1 then restore : sys16^3*8 : get a$ : get a$ : get a$ : goto 2300
  217. 2200 poke 16^3*8 + x , a
  218. 2210 x = x + 1
  219. 2220 goto 2180
  220. 2230 rem*******************************
  221. 2240 rem*---------- seite 12 ---------*
  222. 2250 rem*******************************
  223. 2300 print"[147]wie sie bemerkt haben, ist die normale"
  224. 2310 print"interrupt-adresse = $ea31. sie koennen"
  225. 2320 print"das programm gleich ausprobieren."
  226. 2330 print"druecken sie einmal die f1-taste, dann"
  227. 2340 print"faerbt sich der rahmen anders. sie "
  228. 2350 print"koennen den interrupt noch staerker"
  229. 2360 print"nutzen, als hier gezeigt wird. er "
  230. 2370 print"wuerde sich auch gut fuer musik eignen,"
  231. 2380 print"da er genau 60-mal in einer sekunde"
  232. 2390 print"aufgerufen wird."
  233. 2400 print""tab(14)"taste druecken"
  234. 2410 print""tab(17)"-12-"
  235. 2420 gosub 250
  236. 2430 on a goto 2440 , 1900
  237. 2440 rem*******************************
  238. 2450 rem*-------- seite 13 -----------*
  239. 2460 rem*******************************
  240. 2470 print"[147]so,jetzt haben sie es endlich geschafft."
  241. 2480 print"in den naechsten lektionen moechte ich"
  242. 2490 print"ihnen das rechnen beibringen und noch"
  243. 2500 print"einige andere tricks."
  244. 2510 print"geben sie wieder ihr geraet an."
  245. 2520 a$ = "" : input "d[146] oder f[146] "; a$
  246. 2530 if a$ = "" then end
  247. 2540 if a$ = "d" then f=1 : goto 3000
  248. 2550 if a$ = "f" then f=8 : goto 3000
  249. 2555 if a$ = "z" then goto 2240
  250. 2560 goto 2520
  251. 3000 rem*******************************
  252. 3010 rem*------ lade rotine ----------*
  253. 3020 rem*******************************
  254. 3030 poke 2,f : poke 46,8 : poke 45,3 :poke 2050 ,0:load "lektion 11" ,peek (2)
  255. 32000 data120,169,16,141,20,3,169,128,141,21,3,88,96,100,82,172,165,197,201,4
  256. 32001 data240,3,76,49,234,238,32,208,76,49,234,-1,-1
  257.